﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.Taxa;

namespace Sinacor.UI.Bovespa.Corretagem.Communication.Translator.DataContractToModel
{
    public class Taxa
    {
        #region [PUB] ToTaxa
        public Model.Taxa ToTaxa(TaxaResponse from)
        {
            Model.Taxa taxa;
            if (from == null)
                return null;
            
            taxa = new Model.Taxa();

            taxa.Cliente = (Model.Enum.TipoCliente)from.Cliente;
            taxa.CodigoBolsa = from.CodigoBolsa;
            taxa.Liquidacao = (Model.Enum.TipoLiquidacao)from.Liquidacao;

            taxa.Mercado = from.Mercado;
            taxa.MercadoOrigem = from.MercadoOrigem;
            taxa.NaturezaOperacao = (Model.Enum.TipoNaturezaOperacao)from.NaturezaOperacao;

            taxa.NomeBolsa = from.NomeBolsa;
            taxa.NomeMercado = from.NomeMercado;
            taxa.NomeMercadoOrigem = from.NomeMercadoOrigem;

            taxa.Operacao = (Model.Enum.TipoOperacao)from.Operacao;
            taxa.Papel = (Model.Enum.TipoPapel)from.Papel;

            taxa.PercEmoluentoBovespa = from.PercEmoluentoBovespa;
            taxa.PercEmoluentoCBLC = from.PercEmoluentoCBLC;
            taxa.PercRegistroBovespa = from.PercRegistroBovespa;

            taxa.PercRegistroCBLC = from.PercRegistroCBLC;

            if (from.Periodo != null)
            {
                taxa.Periodo.DataInicial = from.Periodo.DataInicial;
                taxa.Periodo.DataFinal = from.Periodo.DataFinal;
            }

            return taxa;
        }

        public ModelCollection<Model.Taxa> ToTaxa(List<TaxaResponse> from)
        {
            ModelCollection<Model.Taxa> retorno = new ModelCollection<Model.Taxa>();
            
            if (from == null)
                return null;
            
            Model.Taxa taxa;
            foreach (TaxaResponse item in from)
            {
                taxa = new Model.Taxa();

                taxa.Cliente = (Model.Enum.TipoCliente)item.Cliente;
                taxa.CodigoBolsa = item.CodigoBolsa;
                taxa.Liquidacao = (Model.Enum.TipoLiquidacao)item.Liquidacao;

                taxa.Mercado = item.Mercado;
                taxa.MercadoOrigem = item.MercadoOrigem;
                taxa.NaturezaOperacao = (Model.Enum.TipoNaturezaOperacao)item.NaturezaOperacao;

                taxa.NomeBolsa = item.NomeBolsa;
                taxa.NomeMercado = item.NomeMercado;
                taxa.NomeMercadoOrigem = item.NomeMercadoOrigem;

                taxa.Operacao = (Model.Enum.TipoOperacao)item.Operacao;
                taxa.Papel = (Model.Enum.TipoPapel)item.Papel;

                taxa.PercEmoluentoBovespa = item.PercEmoluentoBovespa.Value;
                taxa.PercEmoluentoCBLC = item.PercEmoluentoCBLC.Value;

                taxa.PercRegistroBovespa = item.PercRegistroBovespa.Value;
                taxa.PercRegistroCBLC = item.PercRegistroCBLC.Value;

                if (item.Periodo != null)
                {
                    taxa.Periodo  = new Model.Periodo {
                                    DataInicial = item.Periodo.DataInicial,
                                    DataFinal = item.Periodo.DataFinal
                                    };
                }
                retorno.Add(taxa);
            }
            return retorno;            
            
        }

        #endregion
    }
}
